iT邦幫忙

2022 iThome 鐵人賽

DAY 30
1
Modern Web

看Roadmap學backend overview系列 第 30

ㄟ黑我又開新server囉-容器container tech

  • 分享至 

  • xImage
  •  

前言

Container是什麼?

雖然他依舊是一個很大的主題,但我們可以從技術是為了解決什麼問題開始瞭解起,並且介紹一下他的核心概念。

為什麼出現container

有一張圖(引用自容器技术的介绍)我蠻喜歡的XD

透過圖片可以看到像是煉蠱一樣,每個program其實都會有自己需要的依賴,甚至有可能有program需要同時運行不同版本,而他們各自都有對依賴的版本有所要求,那該怎麼辦才好?

於是我們出現了container!!

什麼是container?

中文稱作容器,你可以說他是一種打包應用程式的技術,也可以說他是一個虛擬的空間,這些都大致描述container技術的輪廓。

透過一個比喻可能會更容易了解這個部分: container就像是貨輪上的一個個貨櫃。

從這裡可以描述container的一些特性

  • 標準化
  • 輕量
  • 易複製移植

簡單來說,容器話技術就是透過各項資源的隔離,來達成資源的最大化利用。

有些人可能會開始覺得有點熟悉...

container vs VM

不是有個技術叫做virtual machine也可以多開嗎?

再來一張來自微軟描述Docker的圖~
圖 20

從這裡可以看到差異,Container能在共用OS的狀況下,運作多個Process,並使用OS在做process scheduling。

也因為是共用OS,所以他足夠輕量、開啟速度又足夠快。

但這樣我們就能夠說container比vm好嗎?

也不是的,事實上沒有孰好孰壞的問題,因為兩個技術想解決的問題是不太相同的,引用我自己的話XD

虛擬機希望解決的問題是在機器層面上隔離,共用的部分是主機的硬體;而container則是在在應用程式層面上隔離,共用的部分是作業系統環境。

container 三本柱

基本上container的技術由三個重要的概念支持: container、image、registry

他們三個的關係環環相扣

  • image: 一個運行容器(也就是process)時所需要的環境。
  • container: 容器就是一個正在運行的鏡像,更準確地說,每個容器就是一段在運行中的process。
  • registry: 可以下載(pull)images的網站

docker

之前曾經想過一篇跟docker有關的介紹,在這裡,就不再多寫了XD

因為是讀書會的題目,所以也有完整的系列文,歡迎來看~~

podman

根據官方文件:

What is Podman? Podman is a daemonless container engine for developing, managing, and running OCI Containers on your Linux System. Containers can either be run as root or in rootless mode. Simply put: alias docker=podman. More details here.

他甚至還在介紹裡面直接跟你說你可以直接把podman alias成docker XDD

雖然有點好笑,但大概也可以從中看到他的特色,及與docker的差異,甚至你可以說他認為自己docker的某種改進:

  • 無背景的daemonless:
    docker有個問題在於他是使用daemon來管理全部的process(container)的,如果daemon掛掉了,所有的process也就掰了,不過podman就並非如此

  • 非root權限:
    docker的操作都必須用root或是具有相同權限的帳號操作,這會造成安全問題。(話說現在也支援rootless了)

  • 易從docker移植
    他提供docker相容的指令,用戶可以輕鬆地從docker移植過去

不過也有一些吐槽: 包括速度慢、bug多等。

不過因為我沒實際用過就不多說什麼了,不過看起來大家會使用他的原因多半都是rootless而去的。

小結

恩...雖然不像,但今天是最後一天的Road Map之旅XD

但其實還有大概好幾天的內容可以寫,等我好好地給他休息好一陣子再來看看要不要接續寫完XD


也是最後一次自我推銷部落格了,我覺得文章寫出來還是希望被別人看到的,最好有些幫助,有些批評,這樣可以開心、也可以有所調整!!

所以~~~

此文章同步發表於部落格,歡迎來逛逛~

參考資料

Docker系列讀書會I-初步介紹Docker
容器和 Docker 簡介
容器技术的介绍


上一篇
程式架構設計Architectural patterns
系列文
看Roadmap學backend overview30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
Charlie
iT邦新手 5 級 ‧ 2022-10-13 22:33:34

還會有第31天嗎 (゚´Д`゚)゚

indexhui iT邦新手 5 級 ‧ 2022-10-13 23:00:17 檢舉

看來是黃金體驗鎮魂曲

tim80411 iT邦新手 5 級 ‧ 2022-10-14 18:59:47 檢舉

暫時不會惹XD

0
Dylan
iT邦新手 3 級 ‧ 2022-10-23 17:11:10

這系列滿不錯的,感謝提供這些優質好文~

tim80411 iT邦新手 5 級 ‧ 2022-10-25 20:18:40 檢舉

感謝你的喜歡及鼓勵!

0
s951080603
iT邦新手 5 級 ‧ 2023-01-26 16:28:33

想請教本身算是有擦邊的科系的私立普大大四生(通訊),
線代、演算法、資結修過但大致上都還回去了,
資工六大科目其他都沒修過,
目前是以 Junior 後端為目標,
希望至少起薪 40k ,
有需要 roadmap 的部分都摸透嗎?
目前自己預計的規劃是如下:
前端 - HTML、CSS、JS 暫時以三本柱就好,有機會再去接觸框架
語言 - JS
框架 - Node.js、Express.js、Nest.js 稍微去了解
資料庫 - PostegreSQL、Redis、MongoDB
版本控制 - Git / GitHub
測試 - Jest ? 這部分比較不了解,但網路上好像建議可以去了解 TDD
CI/CD - GitHub Action? 這也是不太了解,但看蠻多新人職缺好像也都會希望有接觸過
容器 - Docker、K8s 好像是微服務會用到?這也是不太了解
雲端 - AWS 若有時間會看考照的課程去大致了解架構跟應用場景
其餘像 RabbitMQ、Kafka、ElasticSearch 這些有看到路線圖有,
但目前爬文實在不太清楚用途,
所以暫時沒有打算排到規劃中,
目前是希望可能做個兩個 Project 去面試,
盡量把上面列出來的都有應用到,
不知道這樣是否足夠呢?
或著說建議可以刪除、調整哪些?

tim80411 iT邦新手 5 級 ‧ 2023-01-27 00:34:09 檢舉

我非常個人的意見是,如果你不是要求要馬上去要求特別嚴格的公司,而是先求一個起步,其餘再持續學習的話,可以分兩個部分討論:

具備基礎實務能力

  1. 前端三本柱
  2. 後端語言+框架*1
  3. 一種資料庫使用
  4. Git

以上面這些作為基礎去完成一個作品證明自己

上述實務能力的基礎觀念

  1. 語言的一些行為跟概念(以JS為例): event loop, closure, async/sync...等等
  2. 資料庫基礎知識: ACID, Transaction, 正規化...
  3. Git: Git flow、Github flow

其餘網路開發相關知識

  1. 基礎資安: XSS, injection
  2. 基礎網路: HTTP
  3. 基礎密碼: 加密、雜湊、編碼

這裡其實我也有點忘記我補過哪些,不過總的來說是越廣越好,最大的好處是大部分東西都有概念,學習起來會快很多。

最後才是根據你想進的公司去針對性地補充相關知識及工具,測試、容器化(docker)、CICD、IaaS(AWS、GCP、Azure...)

我一開始其實並沒有照roadmap完成XD
OS跟一些細節像是HTTPS等都是後續才持續學習去補足的~

感謝回覆!
自學途中真的走得很不安,
很不確定自己這樣規劃到底對不對,
真的是豁然開朗,
先把基礎打穩再慢慢往後學好了,
畢竟現在去看面試題感覺都回答不出個所以然@@

我要留言

立即登入留言